今天會帶各位對I²C有初步的認識,因為在後面我們將會使用到LCD、OLED顯示器,氣壓感測器或三軸加速度感測器使用I²C通訊協定占多數,所以今天我們將介紹I²C是如何在晶片通訊中工作的。
I2C(Inter-Integrated Circuit),是一個同步的Tx、Rx通訊協定,且I²C的好處就是他只需要兩條線就可以在不同設備之間進行通信,分別是SCL(clock)、SDA(data)組成,為主從式架構,傳送、接收都是由Master發號司令,為了和Slave進行通訊,Master會先發送傳送地址,告訴大家現在要跟哪個Slave通訊,接著各個Slave將ACK(確認)發送給Master並開始通訊
I²C傳送資料會先發送一個start condition的信號,接著開始傳資料,結束時再傳送一個stop condition代表結束
通常不外乎下面幾個步驟:
1.Master發送start condition信號,SCL為高電瓶的時候,SDA由高電瓶向低電瓶觸發,如下圖最左方所示
2.由Master發送 7 bit address 以及 1 bit R/W(1讀/0寫)
3.接著由Slave發送ACK(確認)給Master端,表示已收到資料
4.如果最低位元為低電瓶(即Write寫入),則從Master開始向Slave發送1byte資料。在每個byte之後,Slave發送ACK以確認接收到的數據。
5.如果最低位元為高電瓶(即Read接收),則Slave開始向Master發送數據,並且在接收到每筆byte後,Master將ACK發送給Slave以確認接收到的數據。
6.傳輸完成後,Master將SCL為高電瓶,SDA由低電瓶向高電瓶觸發,並停止發送。
你可能會注意到I²C只使用兩條SDA及SCL資料傳輸,基本上典型的工作電壓範圍為+3.3V或+5v,如上圖所示,會利用上拉電阻將電位上拉(通常為4.7k)連接VCC,所有工作依照Start->Data->Stop。
I²C是嵌入式開發相當重要的部分,因為Master傳送 7 bit address,我們僅僅只需要控制兩條線就能只用1個Master控制128個Slave,這大大減少了IO的控制
我們將在後面的教學中使用I2C跟周邊設備通訊,例如LCD,OLED,加速感測計(ADXL345),溫濕度傳感器(DHT11),距離傳感器(HC-SR04)等等。
- STM32 Nucleo-64 boards (MB1136)資料手冊
https://www.st.com/resource/en/user_manual/dm00105823-stm32-nucleo-64-boards-mb1136-stmicroelectronics.pdf- STM32L053R8 datasheet
https://www.st.com/resource/en/datasheet/stm32l053r8.pdf- RM0367 Reference manual Ultra-low-power STM32L0x3 advanced Arm®-based 32-bit MCUs
https://www.st.com/resource/en/reference_manual/dm00095744-ultra-low-power-stm32l0x3-advanced-arm-based-32-bit-mcus-stmicroelectronics.pdf- ARM Mbed官網介紹 - NUCLEO-L053R8
https://os.mbed.com/platforms/ST-Nucleo-L053R8/- STM32 官網介紹 - STM32L053R8
https://www.st.com/en/microcontrollers-microprocessors/stm32l053r8.html#overview
- 此開發板售價在臺幣1000元以下,讀者可於以下網站購得:
https://www.mouser.tw/
https://www.digikey.tw/
嗯哼